So, 2 überlegungen: Entweder geht man her und "nopped" den jump --> die Prüfroutine wird damit
nicht aufgerufen. Aber man patched dabei meist 2 bis 6 bytes.
Nicht schlecht oder? Aber das Problem ist, man muss die richtige Stelle finden! Hierzu ein Beispiel für CuteFTP32 ver. 2.8
Grüsse gehen raus an die Kryptocrew, Fireball, ultraschall und an
den Rest der TGC Crew
Inhalt
Einleitung
Hi Leute!
Heute will ich euch mal versuchen zu zeigen, wie man "Nag Screens" entfernt. Ich nehme das Programm
CuteFTP 2.8, weil ich das zur Zeit brauche um für meine Homepage ein paar Sachen hoch zu laden.
Wenn ihr das Programm habt, wisst ihr ja bestimmt das am Anfang immer dieser nag screen kommt, von
wegen "Dies ist nur Shareware, usw." Das wollen wir nicht mehr sehen! Da müssen wir halt zum cracken
zurückgreifen.
Leider weiss nicht mehr genau wie ich es gamacht habe (so lange her), aber ich versuche es mal.
Was ich nicht mehr weiss ist mit "??" gekennzeichnet! Ich hoffe nicht so viel :)
Tools
Tutor
Hier zum vorstellen ein pseudo code!
...
...
Start des Programms
...
...
Goto "Prüfe Tage / Nag Screen" <-- Hier geht er zu Prüfroutine!!!!!
Goto "Programm Oberfläche" *||* <-- Hier startet er das Programm!
:"Prüfe Tage / Nag Screen" <-- Entweder Tage Zählen oder Shareware Screen
prüfen <-- Hier startet die Routine
prüfen
prüfen
prüfen
If Tage > 30 Then "Exit Programm" <-- Wenn mehr als 30 Tage dann Prog beenden.
Else Begin
Hallo nur noch blabla Tage bis zum... <-- Meldung oder ähnliches!
RETURN <-- Hier springt er zurück zu *||*
End
:"Programm Oberfläche" <-- Programm ist einsatzbereit!
...
...
... <-- !Hier steht das eigentliche Programm!
...
...
Ende des Programms
Daher eleganter meine 2. Version. Man lässt den Jump ausführen und schreibt in der 1. Zeile
der Prüfroutine ein Return sprich "ret" in assembler --> das Programm prüft nichts sondern
springt sofort wieder zurück! :) und durch das "ret" patcht man nur 1 byte (C3h).
:00413006 90 nop
:00413007 90 nop
:00413008 90 nop
:00413009 90 nop die ganzen nop (no operation) lassen mich darauf
:0041300A 90 nop schliessen, das hier eine komplett neue Prozedur
:0041300B 90 nop aufgerufen wird. Wegen dem großen Leerraum.
:0041300C 90 nop
:0041300D 90 nop
:0041300E 90 nop
:0041300F 90 nop
* Referenced by a CALL at Address:
|:004310CA <-- Von dieser Adresse wird die Prozedur aufgerufen!
|
:00413010 55 pop edi <-- habe durch C3 ersetzt (return bevor check startet)
:00413011 FF68BE jmp far [eax-42]
:00413014 D24600 rol byte ptr [esi+00], cl
:00413017 64A100000000 mov eax, dword ptr fs:[00000000]
:0041301D 50 push eax
:0041301E 64892500000000 mov dword ptr fs:[00000000], esp
:00413025 83EC34 sub esp, 00000034
:00413028 53 push ebx
:00413029 56 push esi
:0041302A 57 push edi
* Reference To: ADVAPI32.RegDeleteKeyA, Ord:0162h REG! <- hier wird was in der reg gemacht!
|
:0041302B 8B3D20404700 mov edi, dword ptr [00474020]
* Possible StringData Ref from Data Obj ->"pfc\CFK12"
|
:00413031 68E4E14800 push 0048E1E4
:00413036 8BD9 mov ebx, ecx
:00413038 6800000080 push 80000000
:0041303D C744242014000000 mov [esp+20], 00000014
:00413045 FFD7 call edi
* Possible StringData Ref from Data Obj ->"pfc\CFK13"
|
:00413047 68D8E14800 push 0048E1D8
:0041304C 6800000080 push 80000000
:00413051 FFD7 call edi
* Possible StringData Ref from Data Obj ->"pfc\CFK14"
|
:00413053 68CCE14800 push 0048E1CC
:00413058 6800000080 push 80000000
:0041305D FFD7 call edi
* Possible StringData Ref from Data Obj ->"pfc\CFK15"
|
:0041305F 68C0E14800 push 0048E1C0
:00413064 6800000080 push 80000000
:00413069 FFD7 call edi
:0041306B 8D44240C lea eax, dword ptr [esp+0C]
:0041306F 50 push eax
* Possible StringData Ref from Data Obj ->"pfc\CFK25"
|
:00413070 68B4E14800 push 0048E1B4
:00413075 6800000080 push 80000000
* Reference To: ADVAPI32.RegOpenKeyA, Ord:0171h REG! <- hier wird was in der reg gemacht!
|
:0041307A FF1524404700 Call dword ptr [00474024]
:00413080 85C0 test eax, eax
:00413082 0F857B020000 jne 00413303
:00413088 8B44240C mov eax, dword ptr [esp+0C]
:0041308C 8D4C2418 lea ecx, dword ptr [esp+18]
:00413090 8D54242C lea edx, dword ptr [esp+2C]
:00413094 51 push ecx
:00413095 33F6 xor esi, esi
:00413097 52 push edx
:00413098 56 push esi
:00413099 50 push eax
* Reference To: ADVAPI32.RegQueryValueA, Ord:017Ah REG! <- hier wird was in der reg gemacht!
|
:0041309A FF1528404700 Call dword ptr [00474028]
:004130A0 85C0 test eax, eax
:004130A2 0F8532020000 jne 004132DA
:004130A8 8D4C2410 lea ecx, dword ptr [esp+10]
:004130AC 8D542414 lea edx, dword ptr [esp+14]
:004130B0 51 push ecx
:004130B1 52 push edx
:004130B2 8D442434 lea eax, dword ptr [esp+34]
...
...
...
Hier könnte man schliessen das das Programm irgendwas in der Regestry prüft. Vielleicht Registriert?
Daher könnte das die Prüfroutine sein. Aber von wo wurde sie gerufen. Mal schauen...
* Possible StringData Ref from Data Obj ->"WINHELP\CFK14"
|
:00431090 68A0ED4800 push 0048EDA0
:00431095 6800000080 push 80000000
:0043109A FFD6 call esi
:0043109C E8671E0300 call 00462F08
:004310A1 8B4004 mov eax, dword ptr [eax+04]
:004310A4 6A00 push 00000000
:004310A6 8BC8 mov ecx, eax
:004310A8 E8B31CFEFF call 00412D60
:004310AD 85C0 test eax, eax
:004310AF 7520 jne 004310D1
:004310B1 E8521E0300 call 00462F08
:004310B6 8B4004 mov eax, dword ptr [eax+04]
:004310B9 6A01 push 00000001
:004310BB 8BC8 mov ecx, eax
:004310BD E86E23FEFF call 00413430
:004310C2 E8411E0300 call 00462F08
:004310C7 8B4804 mov ecx, dword ptr [eax+04]
:004310CA E8411FFEFF call 00413010 <-- hier wird die proz. "gecallt"
:004310CF EB11 jmp 004310E2 <-- hier startet das Programm
...
...
...
Also dürfte jedem klar sein, was zu tun ist. Entweder man nopped diesen Call oder man setzt ein return
in die erste Zeile von der "gecallten Prozedur". Dann aber los...
Sonstige
Ich hoffe das hat dir ein wenig geholfen?? Und das wir uns in meinem Nächsten Tutor sehen.
Und wenn dir noch irgendetwas einfäält mail mir einfach!